package com.qianfeng.openapi.web.master.controller;

import com.qianfeng.openapi.web.master.bean.LayUITableVO;
import com.qianfeng.openapi.web.master.bean.LayUITreeVO;
import com.qianfeng.openapi.web.master.bean.ResultVO;
import com.qianfeng.openapi.common.enums.OpenApiEnums;
import com.qianfeng.openapi.web.master.pojo.Menu;
import com.qianfeng.openapi.web.master.service.MenuService;
import com.qianfeng.openapi.web.master.utils.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;

@RestController
@RequestMapping("/sys/menu")
@Slf4j
public class SysMenuController {

    @Autowired
    private MenuService menuService;

    /**
     * 展示菜单信息
     * 请求路径和请求方式
     *
     * - [GET]() http://localhost/sys/menu/list
     *
     * 请求参数
     *
     */
    @GetMapping("/list")
    public LayUITableVO list(){
        //1. 调用service,
        LayUITableVO result = menuService.findMenuTableVO();

        //2. 响应数据
        return result;
    }


    /**
     *  添加功能中的树结构
     * 请求路径和请求方式
     *
     * - [POST]()  http://localhost/sys/menu/tree
     *
     * 请求参数
     *
     * - 无
     *
     * 响应数据
     */
    @PostMapping("/tree")
    public ResultVO tree(){
        //1. 调用service,要List<LayUITreeVO>
        List<LayUITreeVO> data = menuService.findMenuTreeVO();

        //2. 响应数据
        return R.ok(data);
    }


    /**
     * 添加功能
     * 请求路径和请求方式
     *
     * - [POST]()  http://localhost/sys/menu/add
     *
     * 请求参数
     *
     * - type: Integer（必传项）
     * - name: String（必传项）
     * - parentId: Integer（必传项）
     * - url: String（必传项）
     * - sort: Integer（必传项）
     */
    @PostMapping("/add")
    public ResultVO add(@Valid Menu menu, BindingResult bindingResult){
        //1. 校验参数
        if(bindingResult.hasErrors()){
            log.info("【菜单模块添加】 添加菜单信息失败！！ menu = {}",menu);
            return R.error(OpenApiEnums.REQUEST_PARAMETER_ERROR.getStatus(),bindingResult.getFieldError().getDefaultMessage());
        }
        //2. 调用service添加
        menuService.add(menu);
        //3. 响应数据
        return R.ok();
    }

}
